DOM 基礎入門(Step by Step)

本章會帶你一步一步了解 DOM 基礎概念基本操作
開發者工具:Windows/Linux 按 F12;Mac 按 ⌥⌘I

✅ 建議教學方式:每學完一個概念,就打開對應的練習做一下,看看實際效果。

0)練習文件列表

1)什麼是 DOM?

DOM = Document Object Model(文檔對象模型)

DOM 是 JavaScript 與網頁交互的橋樑。當瀏覽器加載 HTML 頁面時,會將 HTML 結構轉換成一個樹形對象結構,我們稱之為「DOM 樹」。通過 JavaScript,我們可以:

HTML: <h1 id="title">Hello World</h1> JavaScript: const elem = document.getElementById("title"); elem.textContent = "Modified text"; // 改變文本 elem.style.color = "red"; // 改變樣式
簡單理解:
• HTML 是頁面的骨架
• CSS 是頁面的外觀
• JavaScript (DOM) 是頁面的動作與交互

2)DOM 樹結構

要做什麼:了解 HTML 如何被轉換成 DOM 樹。

2.1 HTML 到 DOM 樹的映射

HTML: <html> <body> <h1 id="title">Hello</h1> <p class="msg">Message</p> </body> </html> DOM 樹結構: html | body / \ h1 p (id="title") (class="msg")

2.2 節點類型

重要提示:
• DOM 是動態的——當你用 JavaScript 修改 DOM 時,頁面會即時更新
• DOM 不會改變原 HTML 文件,只影響瀏覽器中的解析結果
• 刷新頁面後,所有 JavaScript 修改的 DOM 都會重置

3)獲取 DOM 元素的方法

要做什麼:學會用 JavaScript 選擇頁面元素。

3.1 按 ID 選擇

HTML: <h1 id="title">Hello</h1> JavaScript: const elem = document.getElementById("title"); console.log(elem); // <h1 id="title">Hello</h1>

3.2 按 Class 選擇

HTML: <p class="msg">Message 1</p> <p class="msg">Message 2</p> JavaScript: const elems = document.getElementsByClassName("msg"); console.log(elems.length); // 2 console.log(elems[0]); // 第一個元素

3.3 按標籤名選擇

HTML: <p>Paragraph 1</p> <p>Paragraph 2</p> JavaScript: const elems = document.getElementsByTagName("p"); for (let i = 0; i < elems.length; i++) { console.log(elems[i].textContent); }

3.4 按屬性選擇(推薦方法)

HTML: <input id="first" type="number" value="5" /> <input type="checkbox" name="nums" value="1" /> JavaScript: // 按 id 選擇 const first = document.querySelector("#first"); // 按 class 選擇 const highlighted = document.querySelector(".highlight"); // 按屬性選擇 const checkboxes = document.querySelectorAll("input[type='checkbox']"); // 按 name 屬性選擇 const nums = document.getElementsByName("nums");
方法對比:
getElementById():只能按 ID,返回單個元素
getElementsByClassName():返回「活的」HTMLCollection
querySelector():支持所有 CSS 選擇器,推薦使用
querySelectorAll():返回 NodeList,支持 forEach

4)讀取元素的屬性與內容

要做什麼:學會讀取和修改元素的信息。

4.1 讀取輸入框的值

HTML: <input id="first" type="number" value="5" /> JavaScript: const elem = document.getElementById("first"); // 讀取值 const value = elem.value; console.log(value); // "5"(注意:值是字符串!) // 修改值 elem.value = "10";
重要提醒:
輸入框的 value 總是字符串,即使是 type="number"。
進行數學運算時必須轉換:Number(value)parseInt(value)

4.2 讀取元素的文本內容

HTML: <p id="msg">Hello World</p> JavaScript: const elem = document.getElementById("msg"); // 讀取文本 console.log(elem.textContent); // "Hello World" // 修改文本 elem.textContent = "New text";

4.3 讀取 HTML 內容

HTML: <div id="box"><b>Bold text</b></div> JavaScript: const elem = document.getElementById("box"); // 讀取 HTML console.log(elem.innerHTML); // "<b>Bold text</b>" // 修改 HTML(小心 XSS!) elem.innerHTML = "<i>Italic text</i>";

4.4 讀取 Checkbox 的選中狀態

HTML: <input id="agree" type="checkbox" /> JavaScript: const elem = document.getElementById("agree"); // 讀取選中狀態 if (elem.checked) { console.log("Checkbox is checked"); } // 修改選中狀態 elem.checked = true;
常用屬性速查:
elem.value:輸入框、選擇框的值
elem.textContent:元素的文本內容
elem.innerHTML:元素的 HTML 內容(危險!)
elem.checked:checkbox / radio 的選中狀態
elem.idelem.className:元素的 id 和 class

5)實踐:表單數據讀取

目標:學會讀取表單元素的值並進行計算。

5.1 HTML 結構

<label for="first">First Number:</label> <input id="first" type="number" value="5" /> <label for="second">Second Number:</label> <input id="second" type="number" value="10" /> <button onclick="calculate()">Calculate</button>

5.2 JavaScript 代碼

function calculate() { // 步驟 1:獲取元素 const firstElem = document.getElementById("first"); const secondElem = document.getElementById("second"); // 步驟 2:讀取值(注意是字符串) const a = firstElem.value; const b = secondElem.value; // 步驟 3:轉換為數字並計算 const sum = Number(a) + Number(b); // 步驟 4:顯示結果 console.log(`${a} + ${b} = ${sum}`); }
驗收標準:
• 點擊「Calculate」按鈕時,Console 顯示計算結果
• 修改輸入框的值後重新計算,結果正確更新

6)實踐:多選框(Checkbox)處理

目標:學會處理多個 checkbox 並收集選中的值。

6.1 HTML 結構

<label><input type="checkbox" name="nums" value="1" /> 1</label> <label><input type="checkbox" name="nums" value="2" /> 2</label> <label><input type="checkbox" name="nums" value="3" /> 3</label> <label><input type="checkbox" name="nums" value="4" /> 4</label> <label><input type="checkbox" name="nums" value="5" /> 5</label> <button onclick="submitCheckbox()">Submit checkbox</button>

6.2 JavaScript 代碼

function submitCheckbox() { // 步驟 1:按 name 屬性獲取所有 checkbox const checkboxes = document.getElementsByName("nums"); // 步驟 2:遍歷並收集選中的值 const picked = []; for (let i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { picked.push(Number(checkboxes[i].value)); } } // 步驟 3:顯示結果 console.log(picked); // 例如:[2, 4, 5] }
驗收標準:
• 勾選某些 checkbox,點擊「Submit」按鈕
• Console 顯示一個數組,包含所有勾選的值
• 例如勾選 2、4、5 時,輸出 [2, 4, 5]

7)修改元素的樣式

要做什麼:學會用 JavaScript 改變元素的外觀。

7.1 修改內聯樣式

HTML: <p id="msg">Hello</p> JavaScript: const elem = document.getElementById("msg"); // 修改樣式 elem.style.color = "red"; elem.style.fontSize = "20px"; elem.style.backgroundColor = "yellow"; // 注意:CSS 的連字符變成駝峰式 // background-color → backgroundColor // font-size → fontSize

7.2 修改 CSS 類名(推薦方法)

HTML: <style> .highlight { color: red; font-weight: bold; } </style> <p id="msg">Hello</p> JavaScript: const elem = document.getElementById("msg"); // 添加類名 elem.classList.add("highlight"); // 移除類名 elem.classList.remove("highlight"); // 切換類名 elem.classList.toggle("highlight"); // 檢查是否有該類 if (elem.classList.contains("highlight")) { console.log("Has highlight"); }
推薦做法:
使用 classList 而不是直接修改 style,原因:
• 樣式邏輯集中在 CSS 文件中
• 更易於維護和修改
• 支持多個樣式的組合(類名)

8)常見的 DOM 操作陷阱

要做什麼:了解初學者常犯的錯誤。

8.1 選擇器錯誤

// ❌ 錯誤:忘記 # 前綴 const elem = document.querySelector("myId"); // ✅ 正確:使用 # 表示 ID const elem = document.querySelector("#myId"); // ❌ 錯誤:忘記 . 前綴 const elem = document.querySelector("myClass"); // ✅ 正確:使用 . 表示 class const elem = document.querySelector(".myClass");

8.2 字符串與數字混淆

// ❌ 錯誤:直接使用 value(是字符串) const num = document.getElementById("input").value; const result = num + 5; // "55" 而不是 60! // ✅ 正確:轉換為數字 const num = Number(document.getElementById("input").value); const result = num + 5; // 60

8.3 時機錯誤

// ❌ 錯誤:HTML 還未加載就執行 JavaScript <script> document.getElementById("myId").textContent = "test"; // 找不到元素! </script> <div id="myId"></div> // ✅ 正確:HTML 加載後再執行 <div id="myId"></div> <script> document.getElementById("myId").textContent = "test"; </script>
重要提醒:
• 確保 JavaScript 執行時,相應的 HTML 元素已加載
• 優先將 <script> 放在 <body> 的最底部
• 或者使用 DOMContentLoaded 事件

9)CSS 選擇器速查

要做什麼:掌握常用的 CSS 選擇器語法。

// 按 ID(唯一) document.querySelector("#myId") // 按 Class document.querySelector(".myClass") // 按標籤名 document.querySelector("div") document.querySelector("p") // 按屬性 document.querySelector("input[type='text']") document.querySelector("[data-name='John']") // 組合選擇器 document.querySelector("#container .item") // 後代選擇 document.querySelector("#container > .item") // 直接子元素 // 選擇多個 document.querySelectorAll(".item") document.querySelectorAll("p, span") // 多個選擇器
快速記憶:
# = ID
. = Class
[...] = 屬性
• 無前綴 = 標籤名

10)最終檢查清單

要做什麼:確保你已掌握 DOM 基礎。

知識點檢查:
1) ✓ 理解什麼是 DOM
2) ✓ 了解 DOM 樹的結構
3) ✓ 能使用 querySelector 選擇元素
4) ✓ 能讀取輸入框的值(value)
5) ✓ 能讀取文本內容(textContent)
6) ✓ 能處理 checkbox 的選中狀態(checked)
7) ✓ 能修改元素的樣式
8) ✓ 理解字符串與數字的轉換
9) ✓ 能遍歷多個元素(for 迴圈或 forEach)
10) ✓ 完成了表單和 checkbox 的實踐練習

11)卡住點樣搵答案

要做什麼:當你卡住時,知道去哪裡找資源。

先參考本課程的 完成版

打開 完成版,查看完整的工作代碼。

再查網站文檔(由淺入深)

12)後續學習路線

要做什麼:了解接下來要學什麼。

進階 DOM 操作(DOM-2 ~ DOM-5)

學習建議

一句總結:DOM 是 JavaScript 與網頁交互的核心——掌握 DOM 基礎,你就能創建動態、交互式的網頁,這是現代前端開發的必備技能。
成果展示

Final 示範頁

下面集中列出適合公開查看的成果頁與示範頁。

`for-edit` 資料夾中的頁面只作編輯用途,主頁不提供公開入口;需要修改教材時再進入相關資料夾使用。